import java.awt.event.*;
import java.sql.*;
import java.util.*;

import javax.swing.*;
import javax.swing.table.*;

public class Grafico2 extends JFrame implements ActionListener {
	
	private Conexion2 c1;
	private int cont = 0;
	private String[] familias;	
	private DefaultTableModel modelo;
	private JTable tabla;
	private String seleccion;
	private ArrayList<String[]> arrayProductos;
	private JButton btnMostrar, btnCambiarFamilia, btnEditar, btnSiguiente, btnAnterior, btnGuardar, btnCerrar;
	private JScrollPane jpane;
	private JFrame ventana2;
	private JLabel lblCod, lblNombre, lblNombreCorto, lblDescripcion, lblPVP, lblFamilia;

	private JTextField txtCod, txtNombre, txtNombreCorto, txtDescripcion, txtPVP, txtFamilia;
	
	public Grafico2() {
		try {
			c1 = new Conexion2();
			c1.hacerConsulta("select count(*) from familia");
			if (c1.getRs().next()) {
				familias = new String[c1.getRs().getInt(1)];
			}
			c1.hacerConsulta("select nombre from familia;");
			while (c1.getRs().next()) {				
				familias[cont] = c1.getRs().getString("nombre");
				cont++;
			}
			seleccion = (String)JOptionPane.showInputDialog(this, "Selecciona una familia de productos", "Familias", JOptionPane.INFORMATION_MESSAGE, null, familias,"");
			if (seleccion != null) {				
				this.setBounds(200, 200, 400, 300);
				this.setLayout(null);
				this.colocarComponentes();
			}
			else {
				System.exit(0);	
			}
		}
		catch (SQLException sqlexception) {
			sqlexception.printStackTrace();
		}
	}	
	
	public void colocarComponentes() {
		modelo = new DefaultTableModel();
		modelo.addColumn("Nombre");
		modelo.addColumn("Precio");	
		tabla = new JTable(modelo);		
		jpane = new JScrollPane(tabla);
		jpane.setBounds(20, 20, 350, 200);
		this.mostrarResultado();
		this.add(jpane);
		btnMostrar = new JButton("Mostrar");
		btnMostrar.setBounds(50, 235, 100, 25);
		this.add(btnMostrar);
		btnCambiarFamilia = new JButton("Cambiar Familia");
		btnCambiarFamilia.setBounds(200, 235, 125, 25);
		this.add(btnCambiarFamilia);
		btnMostrar.addActionListener(this);
		btnCambiarFamilia.addActionListener(this);		
	    tabla.setDefaultEditor(tabla.getColumnClass(1), null);
	}
	
	public void nuevaVentana() {
		ventana2 = new JFrame();	
		ventana2.setLayout(null);
		ventana2.setBounds(300, 300, 600, 360);
		
		ventana2.setVisible(true);
		ventana2.setResizable(false);
		
		btnEditar = new JButton("Editar");
		btnAnterior = new JButton("Anterior");
		btnSiguiente = new JButton("Siguiente");
		btnGuardar = new JButton("Guardar");
		
		btnAnterior.setBounds(135, 285, 100, 25);
		ventana2.add(btnAnterior);
		btnEditar.setBounds(245, 285, 100, 25);
		ventana2.add(btnEditar);
		btnSiguiente.setBounds(355, 285, 100, 25);
		ventana2.add(btnSiguiente);	
		btnGuardar.setBounds(245, 250, 100, 25);
		btnGuardar.setVisible(false);
		ventana2.add(btnGuardar);
		btnCerrar = new JButton("Cerrar");
		btnCerrar.setBounds(490, 285, 80, 25);
		ventana2.add(btnCerrar);
		
		btnEditar.addActionListener(this);
		btnSiguiente.addActionListener(this);
		btnAnterior.addActionListener(this);
		btnGuardar.addActionListener(this);
		btnCerrar.addActionListener(this);
		
		txtCod = new JTextField();
		txtCod.setBounds(150, 50, 150, 25);
		ventana2.add(txtCod);
		txtCod.setEditable(false);
		txtNombre = new JTextField();
		txtNombre.setBounds(150, 80, 300, 25);
		ventana2.add(txtNombre);
		txtNombre.setEditable(false);
		txtNombreCorto = new JTextField();
		txtNombreCorto.setBounds(150, 110, 200, 25);
		ventana2.add(txtNombreCorto);
		txtNombreCorto.setEditable(false);
		txtDescripcion = new JTextField();
		txtDescripcion.setBounds(150, 140, 400, 25);
		ventana2.add(txtDescripcion);
		txtDescripcion.setEditable(false);
		txtPVP = new JTextField();
		txtPVP.setBounds(150, 170, 70, 25);
		ventana2.add(txtPVP);
		txtPVP.setEditable(false);
		txtFamilia = new JTextField();
		txtFamilia.setBounds(150, 200, 100, 25);
		ventana2.add(txtFamilia);
		txtFamilia.setEditable(false);
		
		lblCod = new JLabel("Codigo");
		lblCod.setBounds(20, 50, 100, 25);
		ventana2.add(lblCod);
		lblNombre = new JLabel("Nombre");
		lblNombre.setBounds(20, 80, 100, 25);
		ventana2.add(lblNombre);
		lblNombreCorto = new JLabel("NombreCorto");
		lblNombreCorto.setBounds(20, 110, 100, 25);
		ventana2.add(lblNombreCorto);
		lblDescripcion = new JLabel("Descripcion");
		lblDescripcion.setBounds(20, 140, 100, 25);
		ventana2.add(lblDescripcion);
		lblPVP = new JLabel("PVP");
		lblPVP.setBounds(20, 170, 100, 25);
		ventana2.add(lblPVP);
		lblFamilia = new JLabel("Familia");
		lblFamilia.setBounds(20, 200, 100, 25);
		ventana2.add(lblFamilia);		
		
		if (tabla.getSelectedRow() == 0) {
			btnAnterior.setEnabled(false);
		}
		if (tabla.getSelectedRow() == tabla.getRowCount() - 1) {
			btnSiguiente.setEnabled(false);
		}
		
		this.mostrarProducto();
	}
	
	public void mostrarResultado() {		
		arrayProductos = new ArrayList<String[]>();
		c1.hacerConsulta("select * from producto where familia =(select cod from familia where nombre='"+seleccion+"')");
		try {
			while (c1.getRs().next()) {
				String[] arrayString = {c1.getRs().getString("nombre_corto"), c1.getRs().getString("PVP")};
				arrayProductos.add(arrayString);
			}
		}
		catch (SQLException e) {			
			e.printStackTrace();
		}		
		for (String[] s : arrayProductos) {
			modelo.addRow(s);
		}			
	}
	
	public void mostrarProducto() {
		c1.hacerConsulta("select * from producto where nombre_corto='"+tabla.getValueAt(tabla.getSelectedRow(), 0)+"'");
		try {
			if (c1.getRs().next()) {
				txtCod.setText(c1.getRs().getString("cod"));
				txtNombre.setText(c1.getRs().getString("nombre"));
				txtNombreCorto.setText(c1.getRs().getString("nombre_corto"));
				txtDescripcion.setText(c1.getRs().getString("descripcion"));
				txtPVP.setText(c1.getRs().getString("PVP"));
				txtFamilia.setText(c1.getRs().getString("familia"));
			}
		}
		catch (SQLException e) {			
			e.printStackTrace();
		}				
	}
	
	public void borrarDatos() {
		int count = modelo.getRowCount();
		for (int i = count - 1; i >= 0; i--) {
			modelo.removeRow(i);
		}
	}
	
	public void setCosasEditables() {
		txtCod.setEditable(true);
		txtNombre.setEditable(true);
		txtNombreCorto.setEditable(true);
		txtDescripcion.setEditable(true);
		txtPVP.setEditable(true);
		txtFamilia.setEditable(true);
	}
	
	public void setCosasDisabled() {
		txtCod.setEditable(false);
		txtNombre.setEditable(false);
		txtNombreCorto.setEditable(false);
		txtDescripcion.setEditable(false);
		txtPVP.setEditable(false);
		txtFamilia.setEditable(false);
	}
	
	public void guardarDatos() {
		c1.hacerConsulta("select * from producto where cod='"+txtCod.getText()+"'");
		try {
			if (c1.getRs().next()) {
				c1.hacerUpdate("UPDATE producto SET cod='"+txtCod.getText()+"',nombre='"+txtNombre.getText()+"',nombre_corto='"+txtNombreCorto.getText()+"',descripcion='"+txtDescripcion.getText()+"',PVP='"+txtPVP.getText()+"',familia='"+txtFamilia.getText()+"' where cod='"+txtCod.getText()+"'");
			}
			else {
				c1.hacerUpdate("INSERT INTO `dwes`.`producto` (`cod`, `nombre`, `nombre_corto`, `descripcion`, `PVP`, `familia`) VALUES ('"+txtCod.getText()+"', '"+txtNombre.getText()+"', '"+txtNombreCorto.getText()+"', '"+txtDescripcion.getText()+"', '"+txtPVP.getText()+"', '"+txtFamilia.getText()+"')");
			}
		}		
		catch (SQLException e) {			
			JOptionPane.showMessageDialog(ventana2, "Error SQL");
		}
	}

	public void actionPerformed(ActionEvent ae) {
		if (ae.getSource() == btnMostrar) {
			if (tabla.getSelectedRow() != -1) {
				this.nuevaVentana();
			}
			else {
				JOptionPane.showMessageDialog(this, "No se ha seleccionado producto");
			}
		}
		if (ae.getSource() == btnCambiarFamilia) {			
			seleccion = (String)JOptionPane.showInputDialog(this, "Selecciona una familia de productos", "Familias", JOptionPane.INFORMATION_MESSAGE, null, familias,"");
			if (seleccion != null) {			
				this.borrarDatos();
				this.mostrarResultado();
			}			
		}		
		if (ae.getSource() == btnEditar) {
			if (btnEditar.getText().equals("Editar")) {
				this.setCosasEditables();
				btnEditar.setText("Cancelar");
				btnGuardar.setVisible(true);
			}
			else {
				this.setCosasDisabled();
				btnGuardar.setVisible(false);
				btnEditar.setText("Editar");
			}
		}
		if (ae.getSource() == btnGuardar) {
			this.guardarDatos();
			this.setCosasDisabled();
			btnEditar.setText("Editar");
			btnGuardar.setVisible(false);
			this.borrarDatos();
			this.mostrarResultado();
		}
		if (ae.getSource() == btnAnterior) {
			tabla.setRowSelectionInterval(tabla.getSelectedRow() - 1, tabla.getSelectedRow() - 1);
			this.mostrarProducto();
			if (tabla.getSelectedRow() == 0) {
				btnAnterior.setEnabled(false);
			}		
			btnSiguiente.setEnabled(true);
			
		}
		if (ae.getSource() == btnSiguiente) {
			tabla.setRowSelectionInterval(tabla.getSelectedRow() + 1, tabla.getSelectedRow() + 1);
			this.mostrarProducto();
			if (tabla.getSelectedRow() == tabla.getRowCount() - 1) {
				btnSiguiente.setEnabled(false);
			}			
			btnAnterior.setEnabled(true);			
		}
		if (ae.getSource() == btnCerrar) {
			ventana2.dispose();
		}		
	}	
	
}